home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / PROGRAMM / TUTORIAL / 1307B.ZIP / LINKLIST.MOD < prev    next >
Text File  |  1989-01-18  |  2KB  |  89 lines

  1.                                         (* Chapter 12 - Program 3 *)
  2. MODULE LinkList;
  3.  
  4. FROM InOut   IMPORT WriteString, Write, WriteLn;
  5. FROM Storage IMPORT ALLOCATE, DEALLOCATE, Available;
  6. FROM SYSTEM  IMPORT TSIZE;
  7.  
  8. TYPE  NextPointer = POINTER TO FullName;
  9.       FullName = RECORD
  10.         FirstName : ARRAY[0..12] OF CHAR;
  11.         Initial   : CHAR;
  12.         LastName  : ARRAY[0..15] OF CHAR;
  13.         Next      : NextPointer;
  14.       END;
  15.  
  16. VAR   StartOfList : NextPointer;
  17.       PlaceInList : NextPointer;
  18.       TempPlace   : NextPointer;
  19.       Index       : CARDINAL;
  20.       Enough      : BOOLEAN;
  21.  
  22. BEGIN   (* Main Program *)
  23.  
  24.                   (* Generate the first name in the list *)
  25.  
  26.    ALLOCATE(PlaceInList,TSIZE(FullName));
  27.    StartOfList := PlaceInList;
  28.    PlaceInList^.FirstName := "John ";
  29.    PlaceInList^.Initial := 'Q';
  30.    PlaceInList^.LastName := " Doe";
  31.    PlaceInList^.Next := NIL;
  32.  
  33.                   (* Generate another name in the list *)
  34.  
  35.    TempPlace := PlaceInList;
  36.    ALLOCATE(PlaceInList,TSIZE(FullName));
  37.    TempPlace^.Next := PlaceInList;
  38.    PlaceInList^.FirstName := "Mary ";
  39.    PlaceInList^.Initial := 'R';
  40.    PlaceInList^.LastName := " Johnson";
  41.    PlaceInList^.Next := NIL;
  42.  
  43.                  (* Add 10 more names to complete the list *)
  44.  
  45.    FOR Index := 1 TO 10 DO
  46.       TempPlace := PlaceInList;
  47.       Enough := Available(TSIZE(FullName));  (* Ignore result *)
  48.       ALLOCATE(PlaceInList,TSIZE(FullName));
  49.       TempPlace^.Next := PlaceInList;
  50.       PlaceInList^.FirstName := "Billy ";
  51.       PlaceInList^.Initial := 'R';
  52.       PlaceInList^.LastName := " Franklin";
  53.       PlaceInList^.Next := NIL;
  54.    END;
  55.  
  56.                    (* Display the list on the video monitor *)
  57.  
  58.    PlaceInList := StartOfList;
  59.    REPEAT
  60.       WriteString(PlaceInList^.FirstName);
  61.       Write(PlaceInList^.Initial);
  62.       WriteString(PlaceInList^.LastName);
  63.       WriteLn;
  64.       TempPlace := PlaceInList;
  65.       PlaceInList := PlaceInList^.Next;
  66.    UNTIL TempPlace^.Next = NIL;
  67. END LinkList.
  68.  
  69.  
  70.  
  71.  
  72. (* Result of execution
  73.  
  74. John Q Doe
  75. Mary R Johnson
  76. Billy R Franklin
  77. Billy R Franklin
  78. Billy R Franklin
  79. Billy R Franklin
  80. Billy R Franklin
  81. Billy R Franklin
  82. Billy R Franklin
  83. Billy R Franklin
  84. Billy R Franklin
  85. Billy R Franklin
  86.  
  87. *)
  88.  
  89.